package com.demo.java.OD401_450.OD434;

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【多段线数据压缩(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146323592
 */
public class OdMain {
    // 判断三点是否共线
    public static List<Integer> simplifyCoordinates(List<Integer> coords) {
        List<Integer> result = new ArrayList<>();
        result.add(coords.get(0));  // 保留第一个点
        result.add(coords.get(1));

        // 遍历中间点，检查是否共线
        for (int i = 2; i < coords.size() - 2; i += 2) {
            int x1 = result.get(result.size() - 2);  // 上一个保留的点
            int y1 = result.get(result.size() - 1);
            int x2 = coords.get(i);  // 当前点
            int y2 = coords.get(i + 1);
            int x3 = coords.get(i + 2);  // 下一个点
            int y3 = coords.get(i + 3);

            // 检查三点是否共线
            if ((x2 - x1) * (y3 - y1) == (x3 - x1) * (y2 - y1)) {
                continue;  // 如果共线，则忽略当前点
            } else {
                result.add(x2);  // 否则保留当前点
                result.add(y2);
            }
        }

        // 添加最后一个点
        result.add(coords.get(coords.size() - 2));
        result.add(coords.get(coords.size() - 1));

        return result;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String inputStr = scanner.nextLine();  // 读取输入的坐标字符串
        String[] inputArray = inputStr.split(" ");  // 将字符串按空格分割成数组
        List<Integer> inputList = new ArrayList<>();

        // 将输入的坐标转化为整数并存储到列表中
        for (String s : inputArray) {
            inputList.add(Integer.parseInt(s));
        }

        // 调用简化坐标的方法
        List<Integer> outputList = simplifyCoordinates(inputList);

        // 输出简化后的结果
        for (int i = 0; i < outputList.size(); i++) {
            System.out.print(outputList.get(i));  // 打印坐标
            if (i < outputList.size() - 1) {
                System.out.print(" ");  // 坐标间用空格隔开
            }
        }
    }
}
